let l1 = [9, 9, 9, 9, 9, 9, 9], l2 = [9, 9, 9, 9]
function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val)
    this.next = (next === undefined ? null : next)
}
function a(li) {
    let list = new ListNode(li[0])
    let num = list
    for (let i = 1; i < li.length; i++) {
        num.next = new ListNode(li[i])
        num = num.next
    };
    return list
}
let list1 = a(l1)
let list2 = a(l2)
var addTwoNumbers = function (l1, l2) {
    let head = new ListNode(0);
    let pre = head;
    let carry = 0; // 进位

    while (l1 || l2 || carry) {
        let val1 = l1 ? l1.val : 0;
        let val2 = l2 ? l2.val : 0;

        let sum = val1 + val2 + carry;
        carry = Math.floor(sum / 10); // 更新进位
        let digit = sum % 10; // 当前位的值

        pre.next = new ListNode(digit);
        pre = pre.next;

        if (l1) l1 = l1.next;
        if (l2) l2 = l2.next;
    }

    return head.next;
};

console.log(addTwoNumbers(list1, list2));
// var addTwoNumbers = function (l1, l2) {
//     let head = new ListNode(0)
//     let pre = head
//     let k = 0
//     while (l1 && l2) {
//         if (l1.val + l2.val >= 10) {
//             list = new ListNode((l1.val + l2.val) % 10 + k)
//             k = 1
//         } else {
//             list = new ListNode((l1.val + l2.val) + k)
//             k = 0
//         }
//         pre.next = list
//         pre = pre.next
//         l1 = l1.next
//         l2 = l2.next
//     }
//     if (l1) {
//         while (l1) {
//             if ((l1 + k) >= 10) {
//                 list = new ListNode((l1.val + k) % 10)
//                 k = 1
//             } else {
//                 list = new ListNode(l1.val + k)
//                 k = 0
//             }
//             pre.next = list
//             pre = pre.next
//             l1 = l1.next
//         }
//     }
//     else if (l2) {
//         while (l2) {
//             if ((l2 + k) >= 10) {
//                 list = new ListNode((l2.val + k) % 10)
//                 k = 1
//             } else {
//                 list = new ListNode(l2.val + k)
//                 k = 0
//             }
//             pre.next = list
//             pre = pre.next
//             l2 = l2.next
//         }
//     }
//     else {
//         if (k === 1) {
//             pre.next = new ListNode(1)
//         }
//     }
//     return head.next
// };
// console.log(addTwoNumbers(list1, list2));